// @algorithm @lc id=1 lang=cpp
// @title two-sum

#include <iostream>
#include <vector>
#include <string>
#include "algm/algm.h"
using namespace std;
// @test([2,7,11,15],9)=[0,1]
// @test([3,2,4],6)=[1,2]
// @test([3,3],6)=[0,1]

// @desc 哈希查找

/**
 * @brief
 * 将未找到解的数放入unordered_map中, 直到遇到一个数, 这个数对应的解能够在unordered_map找到的时候, 这两个数就是解.
 */
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
        int                     len = nums.size();
        unordered_map<int, int> map;
        while (len) {
            if (map.count(target - nums[--len])) {
                return { len, map.find(target - nums[len])->second };
            }
            map.insert(make_pair(nums[len], len));
        }
        return {};
    }
};